{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = np.array([1, 2, 3, 4])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 2, 3, 4])"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "b = np.array([[1, 2], [3, 4], [5, 6]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 2],\n",
       "       [3, 4],\n",
       "       [5, 6]])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b.ndim"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(3, 2)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dtype('int32')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b.dtype"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "c = np.arange(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "d = np.linspace(0, 2, 11)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0. , 0.2, 0.4, 0.6, 0.8, 1. , 1.2, 1.4, 1.6, 1.8, 2. ])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1., 1., 1.],\n",
       "       [1., 1., 1.],\n",
       "       [1., 1., 1.]])"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.ones((3, 3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0., 0., 0., 0., 0., 0.],\n",
       "       [0., 0., 0., 0., 0., 0.],\n",
       "       [0., 0., 0., 0., 0., 0.]])"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.zeros((3, 6))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1., 0., 0., 0.],\n",
       "       [0., 1., 0., 0.],\n",
       "       [0., 0., 1., 0.],\n",
       "       [0., 0., 0., 1.]])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.eye(4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-1.82134516,  0.7626877 ,  0.52076791, -0.68714264],\n",
       "       [ 1.015052  , -0.74986093, -0.33091723,  0.45597307],\n",
       "       [-0.64876694,  0.93862447,  0.51027737, -0.67818371],\n",
       "       [-2.36619143,  0.67864442,  1.31313101,  0.47688732],\n",
       "       [-0.27834886, -0.57899231, -0.42923581, -1.10828044],\n",
       "       [ 0.50534669,  0.02582075, -0.33028498,  0.38591915]])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.random.randn(6, 4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = np.arange(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0, 3, 9)"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a[0], a[3], a[-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 2, 3])"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a[:4]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([3, 4, 5, 6])"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a[3: 7]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([6, 7, 8, 9])"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a[6:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([2, 4, 6])"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a[2: 8: 2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([2, 4, 6, 8])"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a[2::2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 3, 6, 9])"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a[::3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0, 10, 20, 30, 40, 50])"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.arange(0, 51, 10)\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0],\n",
       "       [10],\n",
       "       [20],\n",
       "       [30],\n",
       "       [40],\n",
       "       [50]])"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.arange(0, 51, 10).reshape(6, 1)\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0,  1,  2,  3,  4,  5],\n",
       "       [10, 11, 12, 13, 14, 15],\n",
       "       [20, 21, 22, 23, 24, 25],\n",
       "       [30, 31, 32, 33, 34, 35],\n",
       "       [40, 41, 42, 43, 44, 45],\n",
       "       [50, 51, 52, 53, 54, 55]])"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.arange(0, 51, 10).reshape(6, 1) + np.arange(6)\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0, 25)"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a[0, 0], a[2, -1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([2, 3, 4])"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a[0, 2:5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0,  1,  2],\n",
       "       [10, 11, 12],\n",
       "       [20, 21, 22]])"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a[:3, :3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([20, 21, 22, 23, 24, 25])"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a[2, :]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 3, 13, 23, 33, 43, 53])"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a[:, 3] # 结果应该是行向量，但Numpy自动转换行向量形式"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0,  2,  4],\n",
       "       [10, 12, 14],\n",
       "       [20, 22, 24],\n",
       "       [30, 32, 34],\n",
       "       [40, 42, 44],\n",
       "       [50, 52, 54]])"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a[:, ::2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0,  3],\n",
       "       [20, 23],\n",
       "       [40, 43]])"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a[::2, ::3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([11, 19, 18, 10, 17, 16])"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.random.randint(10, 20, 6) # 10  到 20 之间产生6个随机数\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([False, False,  True,  True, False,  True])"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a % 2 == 0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([18, 10, 16])"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a[a % 2 == 0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0,  1,  2,  3,  4,  5],\n",
       "       [10, 11, 12, 13, 14, 15],\n",
       "       [20, 21, 22, 23, 24, 25],\n",
       "       [30, 31, 32, 33, 34, 35],\n",
       "       [40, 41, 42, 43, 44, 45],\n",
       "       [50, 51, 52, 53, 54, 55]])"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.arange(0, 51, 10).reshape(6, 1) + np.arange(6)\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0,  2,  4, 10, 12, 14, 20, 22, 24, 30, 32, 34, 40, 42, 44, 50, 52,\n",
       "       54])"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a[a % 2 == 0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 2, 3, 4, 5])"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.arange(6)\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([2, 3, 4])"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b = a[2: 5]\n",
    "b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([  2, 100,   4])"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b[1] = 100\n",
    "b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([  0,   1,   2, 100,   4,   5])"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a # 证明Numpy数组是共享内存的"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.may_share_memory(a, b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([  2, 100,   4,   5])"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b = a[2: 6].copy()\n",
    "b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([2, 3, 4, 5])"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b[1] = 3\n",
    "b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([  0,   1,   2, 100,   4,   5])"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.may_share_memory(a, b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 2  3  5  7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89\n",
      " 97]\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "适用埃拉托斯特尼筛法打印出[0, 100]之间的所有质数\n",
    "'''\n",
    "\n",
    "import numpy as np\n",
    "\n",
    "a = np.arange(1, 101)\n",
    "n_max = int(np.sqrt(len(a))) # n_max == 10\n",
    "is_prime = np.ones(len(a), dtype=bool) # 创建100个元素的数组，用来标记是否为质数\n",
    "is_prime[0] = False\n",
    "\n",
    "for i in range(2, n_max):\n",
    "    if i in a[is_prime]:\n",
    "        is_prime[(i**2 - 1)::i] = False\n",
    "\n",
    "print(a[is_prime])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 2, 3, 4, 5])"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.arange(6)\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[2, 1, 3, 2, 4],\n",
       "       [2, 4, 4, 1, 2],\n",
       "       [1, 4, 3, 3, 3],\n",
       "       [2, 2, 3, 3, 2]])"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b = np.random.randint(1, 5, 20).reshape(4, 5)\n",
    "b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 6,  3,  9,  6, 12],\n",
       "       [ 6, 12, 12,  3,  6],\n",
       "       [ 3, 12,  9,  9,  9],\n",
       "       [ 6,  6,  9,  9,  6]])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b * 3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 5,  6,  7,  8,  9, 10])"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a + 5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "6.89 µs ± 35.9 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n"
     ]
    }
   ],
   "source": [
    "c = np.arange(10000)\n",
    "%timeit c + 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.85 ms ± 57.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "%timeit [i + 1 for i in c]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "H:\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:1: DeprecationWarning: This function is deprecated. Please call randint(1, 5 + 1) instead\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[4, 3, 4, 5],\n",
       "       [2, 2, 4, 2],\n",
       "       [3, 3, 4, 2],\n",
       "       [1, 4, 2, 1],\n",
       "       [4, 2, 1, 3]])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.random.random_integers(1, 5, (5, 4))\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.random.randint(1, 5 + 1)\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "H:\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:1: DeprecationWarning: This function is deprecated. Please call randint(1, 5 + 1) instead\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[4, 4, 5, 4],\n",
       "       [4, 1, 3, 3],\n",
       "       [2, 2, 2, 2],\n",
       "       [2, 2, 1, 5],\n",
       "       [5, 2, 2, 4]])"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.random.random_integers(1, 5, (5, 4))\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 1, 1, 1],\n",
       "       [1, 1, 1, 1],\n",
       "       [1, 1, 1, 1],\n",
       "       [1, 1, 1, 1],\n",
       "       [1, 1, 1, 1]])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b = np.ones((5, 4), dtype=int)\n",
    "b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[5, 5, 6, 5],\n",
       "       [5, 2, 4, 4],\n",
       "       [3, 3, 3, 3],\n",
       "       [3, 3, 2, 6],\n",
       "       [6, 3, 3, 5]])"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a + b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "H:\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:1: DeprecationWarning: This function is deprecated. Please call randint(1, 5 + 1) instead\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[4, 4, 2, 3],\n",
       "       [1, 3, 5, 2],\n",
       "       [1, 4, 1, 4]])"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c = np.random.random_integers(1, 5, (3, 4))\n",
    "c"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "H:\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:1: DeprecationWarning: This function is deprecated. Please call randint(1, 5 + 1) instead\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[3, 3, 4, 1],\n",
       "       [3, 1, 3, 3],\n",
       "       [4, 3, 3, 5]])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d = np.random.random_integers(1, 5, (3, 4))\n",
    "d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[7, 7, 6, 4],\n",
       "       [4, 4, 8, 5],\n",
       "       [5, 7, 4, 9]])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c + d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[12, 12,  8,  3],\n",
       "       [ 3,  3, 15,  6],\n",
       "       [ 4, 12,  3, 20]])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c * d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "H:\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:1: DeprecationWarning: This function is deprecated. Please call randint(1, 5 + 1) instead\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[4, 1],\n",
       "       [1, 3],\n",
       "       [5, 1]])"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.random.random_integers(1, 5, (3, 2))\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "H:\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:1: DeprecationWarning: This function is deprecated. Please call randint(1, 5 + 1) instead\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[5, 1, 5],\n",
       "       [3, 3, 5]])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b = np.random.random_integers(1, 5, (2, 3))\n",
    "b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[23,  7, 25],\n",
       "       [14, 10, 20],\n",
       "       [28,  8, 30]])"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.dot(a, b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "H:\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:1: DeprecationWarning: This function is deprecated. Please call randint(1, 5 + 1) instead\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[3, 5, 1, 4],\n",
       "       [1, 1, 4, 1],\n",
       "       [5, 4, 1, 5],\n",
       "       [2, 3, 5, 2],\n",
       "       [4, 3, 1, 3]])"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.random.random_integers(1, 5, (5, 4))\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 2, 3])"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b = np.arange(4)\n",
    "b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[3, 6, 3, 7],\n",
       "       [1, 2, 6, 4],\n",
       "       [5, 5, 3, 8],\n",
       "       [2, 4, 7, 5],\n",
       "       [4, 4, 3, 6]])"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a + b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 2, 3, 4])"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c = np.arange(5)\n",
    "c"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "operands could not be broadcast together with shapes (5,4) (5,) ",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-26-e81e582b6fa9>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0ma\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0mc\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;31mValueError\u001b[0m: operands could not be broadcast together with shapes (5,4) (5,) "
     ]
    }
   ],
   "source": [
    "a + c"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0],\n",
       "       [1],\n",
       "       [2],\n",
       "       [3],\n",
       "       [4]])"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c = np.arange(5).reshape(5, 1)\n",
    "c"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[3, 5, 1, 4],\n",
       "       [2, 2, 5, 2],\n",
       "       [7, 6, 3, 7],\n",
       "       [5, 6, 8, 5],\n",
       "       [8, 7, 5, 7]])"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a + c"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = np.array([1, 2, 3, 4])\n",
    "b = np.array([4, 2, 2, 4])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([False,  True, False,  True])"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a == b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([False, False,  True, False])"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a > b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(a == b).all()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(a == b).any()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 2, 3, 4, 5])"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.arange(6)\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 1.        ,  0.54030231, -0.41614684, -0.9899925 , -0.65364362,\n",
       "        0.28366219])"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.cos(a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([  1.        ,   2.71828183,   7.3890561 ,  20.08553692,\n",
       "        54.59815003, 148.4131591 ])"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.exp(a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.        , 1.        , 1.41421356, 1.73205081, 2.        ,\n",
       "       2.23606798])"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sqrt(a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "H:\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:1: DeprecationWarning: This function is deprecated. Please call randint(1, 5 + 1) instead\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([5, 5, 4, 1, 5, 2])"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.random.random_integers(1, 5, 6)\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "22"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a.sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3.6666666666666665"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.5986105077709065"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a.std()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a.min()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a.max()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a.argmin()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a.argmax()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "H:\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:1: DeprecationWarning: This function is deprecated. Please call randint(1, 5 + 1) instead\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[3, 5, 3, 1],\n",
       "       [5, 4, 4, 3],\n",
       "       [2, 3, 4, 1],\n",
       "       [5, 3, 3, 4],\n",
       "       [1, 5, 5, 2],\n",
       "       [1, 4, 3, 5]])"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b = np.random.random_integers(1, 5, (6, 4))\n",
    "b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "79"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b.sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([17, 24, 22, 16])"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b.sum(axis=0) # 0按行表示"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([12, 16, 10, 15, 13, 13])"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b.sum(axis=1) # 1按列表示"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "79"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b.sum(axis=1).sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 3, 1, 3, 1, 1])"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b.min(axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([3, 3, 3, 1, 0, 0], dtype=int64)"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b.argmin(axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1.41421356, 0.70710678, 1.11803399, 0.8291562 , 1.78535711,\n",
       "       1.47901995])"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b.std(axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "H:\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:9: DeprecationWarning: This function is deprecated. Please call randint(0, 1 + 1) instead\n",
      "  if __name__ == '__main__':\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1d459e80688>,\n",
       " <matplotlib.lines.Line2D at 0x1d45b2e4608>]"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "n_person = 2000\n",
    "n_times = 500\n",
    "\n",
    "t = np.arange(n_times)\n",
    "steps = 2 * np.random.random_integers(0, 1, (n_person, n_times)) - 1\n",
    "\n",
    "amount = np.cumsum(steps, axis=1)\n",
    "sd_amount = amount ** 2\n",
    "mean_sd_amount = sd_amount.mean(axis=0)\n",
    "\n",
    "plt.xlabel(r\"$t$\")\n",
    "plt.ylabel(r\"$\\sqrt{\\langle (\\delta x)^2 \\ rangle}$\")\n",
    "plt.plot(t, np.sqrt(mean_sd_amount), 'g.', t, np.sqrt(t), 'r-')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.arange(12)\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "b = a.reshape(4, 3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0,  1,  2],\n",
       "       [ 3,  4,  5],\n",
       "       [ 6,  7,  8],\n",
       "       [ 9, 10, 11]])"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b.ravel()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 2, 3])"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.arange(4)\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4,)"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [],
   "source": [
    "b = a[:, np.newaxis]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0],\n",
       "       [1],\n",
       "       [2],\n",
       "       [3]])"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4, 1)"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0, 1, 2, 3]])"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c = a[np.newaxis, :]\n",
    "c"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1, 4)"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "H:\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:1: DeprecationWarning: This function is deprecated. Please call randint(1, 10 + 1) instead\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[ 5, 10,  7,  8],\n",
       "       [ 7,  7,  4,  1],\n",
       "       [ 6, 10,  6,  2],\n",
       "       [ 5,  6,  9,  2],\n",
       "       [ 9,  2,  6,  8],\n",
       "       [ 3, 10,  6,  3]])"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.random.random_integers(1, 10, (6, 4))\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 5,  7,  8, 10],\n",
       "       [ 1,  4,  7,  7],\n",
       "       [ 2,  6,  6, 10],\n",
       "       [ 2,  5,  6,  9],\n",
       "       [ 2,  6,  8,  9],\n",
       "       [ 3,  3,  6, 10]])"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b = np.sort(a, axis=1)\n",
    "b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [],
   "source": [
    "a.sort(axis=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 3,  2,  4,  1],\n",
       "       [ 5,  6,  6,  2],\n",
       "       [ 5,  7,  6,  2],\n",
       "       [ 6, 10,  6,  3],\n",
       "       [ 7, 10,  7,  8],\n",
       "       [ 9, 10,  9,  8]])"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "H:\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:1: DeprecationWarning: This function is deprecated. Please call randint(1, 10 + 1) instead\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([ 5,  3,  5, 10,  8,  4])"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.random.random_integers(1, 10, 6)\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 5, 0, 2, 4, 3], dtype=int64)"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "idx = a.argsort()\n",
    "idx"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 3,  4,  5,  5,  8, 10])"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a[idx]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [],
   "source": [
    "p = np.poly1d([1, -4, 3])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p(0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([3., 1.])"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p.roots"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0., 0.])"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p(p.roots)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p.order"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 1, -4,  3])"
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p.coeffs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 1.24895094 -2.65634346  2.31364161  0.17995662]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1d45b2f5248>,\n",
       " <matplotlib.lines.Line2D at 0x1d459dd1cc8>]"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "n_dots = 20\n",
    "n_order = 3\n",
    "\n",
    "x = np.linspace(0, 1, n_dots)\n",
    "y = np.sqrt(x) + 0.2 * np.random.rand(n_dots)\n",
    "p = np.poly1d(np.polyfit(x, y, n_order))\n",
    "\n",
    "print(p.coeffs)\n",
    "\n",
    "t = np.linspace(0, 1, 200)\n",
    "plt.plot(x, y, 'ro', t, p(t), '-')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3.139588\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "n_dots = 1000000\n",
    "x = np.random.random(n_dots)\n",
    "y = np.random.random(n_dots)\n",
    "\n",
    "distance = np.sqrt(x ** 2 + y ** 2)\n",
    "in_circle = distance[distance < 1]\n",
    "\n",
    "pi = 4 * float(len(in_circle)) / n_dots\n",
    "print(pi)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0,  1,  2,  3,  4],\n",
       "       [ 5,  6,  7,  8,  9],\n",
       "       [10, 11, 12, 13, 14]])"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.arange(15).reshape(3, 5)\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.savetxt('a.txt', a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " 驱动器 C 中的卷没有标签。\n",
      " 卷的序列号是 C2D7-8FF8\n",
      "\n",
      " C:\\Users\\wang\\PythonScript\\scikit-learn-HuangYongchang 的目录\n",
      "\n",
      "2020/02/21  15:10    <DIR>          .\n",
      "2020/02/21  15:10    <DIR>          ..\n",
      "2020/02/21  09:34    <DIR>          .ipynb_checkpoints\n",
      "2020/02/21  15:10               378 a.txt\n",
      "2020/02/21  09:18            47,119 book.png\n",
      "2020/02/21  09:18            19,273 ch02.01.ipynb\n",
      "2020/02/21  15:00            77,994 ch02.02.ipynb\n",
      "               4 个文件        144,764 字节\n",
      "               3 个目录 61,281,034,240 可用字节\n"
     ]
    }
   ],
   "source": [
    "ls"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.,  1.,  2.,  3.,  4.],\n",
       "       [ 5.,  6.,  7.,  8.,  9.],\n",
       "       [10., 11., 12., 13., 14.]])"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b = np.loadtxt('a.txt')\n",
    "b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0,  1,  2,  3,  4],\n",
       "       [ 5,  6,  7,  8,  9],\n",
       "       [10, 11, 12, 13, 14]])"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.save('a.npy', a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0,  1,  2,  3,  4],\n",
       "       [ 5,  6,  7,  8,  9],\n",
       "       [10, 11, 12, 13, 14]])"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c = np.load('a.npy')\n",
    "c"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
